//  用ESlint提供的现成的规则集，要用到@eslint/js这个依赖包
import eslint from "@eslint/js";
// 启用隐藏的全局变量规则
import globals from "globals";
import tseslint from "typescript-eslint";
//
import eslintPluginVue from "eslint-plugin-vue";

import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended";
export default [
  {
    ignores: ["node_modules", "dist", "public"],
  },
  // 用ESlint提供的现成的规则集
  eslint.configs.recommended,
  /** ts推荐配置 */
  ...tseslint.configs.recommended,
  // 我们使用了eslintPluginVue.configs['flat/recommended']作为vue的推荐规则配置
  ...eslintPluginVue.configs["flat/recommended"],
  /**
   * javascript 规则
   */
  {
    files: ["**/*.{js,mjs,cjs,vue}"],
    rules: {
      "no-console": "error",
    },
  },
  /**
   * 配置全局变量
   */
  {
    languageOptions: {
      globals: {
        ...globals.browser,

        /** 追加一些其他自定义全局规则 */
        wx: true,
      },
    },
  },
  /**
   * vue 规则
   */
  {
    files: ["**/*.vue"],
    languageOptions: {
      parserOptions: {
        /** typescript项目需要用到这个 */
        parser: tseslint.parser,
        ecmaVersion: "latest",
        /** 允许在.vue 文件中使用 JSX */
        ecmaFeatures: {
          jsx: true,
        },
      },
    },
    rules: {
      // 在这里追加 vue 规则
      "vue/no-mutating-props": [
        "error",
        {
          shallowOnly: true,
        },
      ],
    },
  },
  /**
   * typescript 规则
   */
  {
    files: ["**/*.{ts,tsx,vue}"],
    rules: {},
  },

  /**
   * prettier 配置
   * 会合并根目录下的prettier.config.js 文件
   * @see https://prettier.io/docs/en/options
   */
  eslintPluginPrettierRecommended,
];
